import core from '@/core/'

/**
 * 下载文件 - 该方法在H5下下载的文件没有后缀名。非H5下未尝试
 * @param {String} url 下载地址
 * @param {Boolean} hasPreserve 是否保存
 * @param {String} name 保存文件名
 * @param {Function} callback 回调函数
 */
const download = ({url, name, callback} = {}) => {
	// #ifdef H5
	if (1) { // 直接在新的标签页中打开即可
		window.open(url, '_blank')
	} else {
		if (!name) {
			name = url.split('/').pop()
		}
		const tmpa = document.createElement('a')
		tmpa.download = name
		tmpa.href = url
		document.body.appendChild(tmpa)
		tmpa.click()
		document.body.removeChild(tmpa)
	}
	// #endif
	// #ifndef H5
	uni.downloadFile({
		url,
		success: res => {
			if (res.statusCode === 200) {
				uni.openDocument({ // 下载并后并打开
					filePath: res.tempFilePath
				})
			}
		}
	})
	// #endif
}

/**
 * 保存内容
 * H5可保存任何内容
 * 前提是已经拿到文件数据了
 * 其它目前保存图片
 */
const preserveData = (data, name, url) => {
	return new Promise((resolve, reject) => {
		// #ifdef H5
		if (!name && url) {
			name = url.split('/').pop()
		}
		const tmpa = document.createElement('a')
		tmpa.download = name || '下载文件'
		tmpa.href = data
		document.body.appendChild(tmpa)
		tmpa.click()
		document.body.removeChild(tmpa)
		resolve()
		// #endif
		// #ifndef H5
		uni.saveImageToPhotosAlbum({
		    filePath: tempFilePath,
		    success: () => {
		        core.showToast('保存成功')
				resolve()
		    },
		    fail: error => {
		        console.log('保存失败：', error)
		        core.showModal('保存失败')
				reject()
		    }
		})
		// #endif
		
		// // #ifdef MP-WEIXIN
		// tempFilePath.replace(/^data:image\/png/, "data:application/octet-stream")
		// wx.miniProgram.postMessage({
		// 	data: { 
		// 		base64: tempFilePath
		// 	}
		// })
		// //触发 wx.miniProgram.postMessage的bindmessage
		// wx.miniProgram.redirectTo({
		// 	url: '此页面路径',
		// })
		// // #endif
	})
}

/**
 * 下载一个文件
 */
const downloadFile = (url, hasPreserve, name) => {
	return new Promise((resolve, reject) => {
		if (url) {
			if (core.isDevelopment && 0) {
				console.log('开发模式下不下载')
				resolve()
			} else {
				uni.showLoading({
					title: '正在下载中',
					mask: false
				})
				uni.downloadFile({
					url,
					success: (res) => {
						uni.hideLoading()
						if (res.statusCode === 200) {
							if (hasPreserve) {
								preserveData(res.tempFilePath, name).then(resolve).catch(reject)
							} else {
								resolve(res.tempFilePath)
							}
						} else {
							core.showToast('下载失败')
							reject()
						}
					},
					fail: (err) => {
						uni.hideLoading()
						console.log(err)
						core.showToast('下载失败')
						reject()
					}
				})
			}
		} else  {
			core.showToast('没有下载地址')
			reject()
		}
	})
}

export default download